﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MsTestUtilities.Utilities;

namespace MsTestUtilities.RowTests
{
    public class Justifier<T1, E>
    {	
		private TestCaseCollection<T1, E> _builder;
		private ITestCase<T1, E> _testCase;

		public Justifier(TestCaseCollection<T1, E> builder, ITestCase<T1, E> testCase)
		{
			_builder = builder;
			_testCase = testCase;
		}
		
		public TestCaseCollection<T1, E> Because(string justificationMessage)	
		{
			_testCase.Justification = new Justification(justificationMessage);

			return _builder;
		}

		public TestCaseCollection<T1, E> Fact	
		{	
			get 
			{
				_testCase.Justification = new Justification();		
				return _builder;
			}
		}
    }

    public class Justifier<T1, T2, E>
    {	
		private TestCaseCollection<T1, T2, E> _builder;
		private ITestCase<T1, T2, E> _testCase;

		public Justifier(TestCaseCollection<T1, T2, E> builder, ITestCase<T1, T2, E> testCase)
		{
			_builder = builder;
			_testCase = testCase;
		}
		
		public TestCaseCollection<T1, T2, E> Because(string justificationMessage)	
		{
			_testCase.Justification = new Justification(justificationMessage);

			return _builder;
		}

		public TestCaseCollection<T1, T2, E> Fact	
		{	
			get 
			{
				_testCase.Justification = new Justification();		
				return _builder;
			}
		}
    }

    public class Justifier<T1, T2, T3, E>
    {	
		private TestCaseCollection<T1, T2, T3, E> _builder;
		private ITestCase<T1, T2, T3, E> _testCase;

		public Justifier(TestCaseCollection<T1, T2, T3, E> builder, ITestCase<T1, T2, T3, E> testCase)
		{
			_builder = builder;
			_testCase = testCase;
		}
		
		public TestCaseCollection<T1, T2, T3, E> Because(string justificationMessage)	
		{
			_testCase.Justification = new Justification(justificationMessage);

			return _builder;
		}

		public TestCaseCollection<T1, T2, T3, E> Fact	
		{	
			get 
			{
				_testCase.Justification = new Justification();		
				return _builder;
			}
		}
    }

    public class Justifier<T1, T2, T3, T4, E>
    {	
		private TestCaseCollection<T1, T2, T3, T4, E> _builder;
		private ITestCase<T1, T2, T3, T4, E> _testCase;

		public Justifier(TestCaseCollection<T1, T2, T3, T4, E> builder, ITestCase<T1, T2, T3, T4, E> testCase)
		{
			_builder = builder;
			_testCase = testCase;
		}
		
		public TestCaseCollection<T1, T2, T3, T4, E> Because(string justificationMessage)	
		{
			_testCase.Justification = new Justification(justificationMessage);

			return _builder;
		}

		public TestCaseCollection<T1, T2, T3, T4, E> Fact	
		{	
			get 
			{
				_testCase.Justification = new Justification();		
				return _builder;
			}
		}
    }

    public class Justifier<T1, T2, T3, T4, T5, E>
    {	
		private TestCaseCollection<T1, T2, T3, T4, T5, E> _builder;
		private ITestCase<T1, T2, T3, T4, T5, E> _testCase;

		public Justifier(TestCaseCollection<T1, T2, T3, T4, T5, E> builder, ITestCase<T1, T2, T3, T4, T5, E> testCase)
		{
			_builder = builder;
			_testCase = testCase;
		}
		
		public TestCaseCollection<T1, T2, T3, T4, T5, E> Because(string justificationMessage)	
		{
			_testCase.Justification = new Justification(justificationMessage);

			return _builder;
		}

		public TestCaseCollection<T1, T2, T3, T4, T5, E> Fact	
		{	
			get 
			{
				_testCase.Justification = new Justification();		
				return _builder;
			}
		}
    }

    public class Justifier<T1, T2, T3, T4, T5, T6, E>
    {	
		private TestCaseCollection<T1, T2, T3, T4, T5, T6, E> _builder;
		private ITestCase<T1, T2, T3, T4, T5, T6, E> _testCase;

		public Justifier(TestCaseCollection<T1, T2, T3, T4, T5, T6, E> builder, ITestCase<T1, T2, T3, T4, T5, T6, E> testCase)
		{
			_builder = builder;
			_testCase = testCase;
		}
		
		public TestCaseCollection<T1, T2, T3, T4, T5, T6, E> Because(string justificationMessage)	
		{
			_testCase.Justification = new Justification(justificationMessage);

			return _builder;
		}

		public TestCaseCollection<T1, T2, T3, T4, T5, T6, E> Fact	
		{	
			get 
			{
				_testCase.Justification = new Justification();		
				return _builder;
			}
		}
    }

}
